﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AdmLaboratorios.Business;
using AdmLaboratorios.DTO;

namespace AdmLaboratorios
{
    public partial class frmProductoMaestro : Form
    {
        public frmProductoMaestro()
        {
            InitializeComponent();
        }

        private void frmProductoMaestro_Load(object sender, EventArgs e)
        {
            gv.DataSource = Productos.Filtrados("");
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.Close();
        }

        private void txProducto_TextChanged(object sender, EventArgs e)
        {
            ReLoad();
        }

        private void ReLoad()
        {
            gv.DataSource = null;
            gv.DataSource = Productos.Filtrados(txProducto.Text);
        }

        private void btnNuevoProducto_Click(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmProductoABM>();
        }

        private void btnModificarProducto_Click(object sender, EventArgs e)
        {
            Modificar();
        }

        private void Modificar()
        {
            if (gv.SelectedRows.Count == 1)
            {
                var f = FormsFactory.ShowForm<frmProductoABM>();
                f.LoadProducto(Productos.Get((int)gv.SelectedRows[0].Cells["Id"].Value));
            }
        }

        private void btnEliminarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                if (gv.SelectedRows.Count == 1)
                {
                    if (MessageBox.Show(
                        "Está a punto de eliminar el Producto seleccionado. Esta operación no puede deshacerse. ¿Desea continuar?",
                        "Eliminar Producto",
                        MessageBoxButtons.OKCancel,
                        MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)
                    {
                        bool eliminada = Productos.Eliminar((int)gv.SelectedRows[0].Cells["Id"].Value);

                        if (eliminada)
                        {
                            MessageBox.Show("El Producto se eliminó correctamente.",
                                "Operación Completada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            ReLoad();
                        }
                        else
                        {
                            MessageBox.Show("No se puede eliminar el Producto, ya que existen registros relacionados.",
                                "Imposible Eliminar", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                FormsHelper.MsgErrorInesperado(ex);
            }
        }

        private void gv_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            Modificar();
        }
    }
}
